//
//  UILabel.swift
//  Documentation
//
//  Created by Toj on 1/12/23.
//

@available(iOS 2.0, *)
open class UILabel : UIView, NSCoding, UIContentSizeCategoryAdjusting {

    // 文本内容. 默认: nil
    open var text: String? = nil

    // 文本字体. 默认: 系统17号字体
    open var font: UIFont! = UIFont.systemFont(ofSize: 17)

    // 文本颜色. 默认: 黑色
    open var textColor: UIColor! = .black

    // 阴影颜色. 默认: nil
    open var shadowColor: UIColor? = nil

    // 阴影偏移量. 默认: CGSizeMake(0, -1), 一个朝上的阴影
    open var shadowOffset: CGSize = CGSize(width: 0, height: -1)
    
    // 文本对齐方式. 默认: 左侧
    open var textAlignment: NSTextAlignment = .left
    
    // 文字展示不下, 文本换行/ 截取的方式. 默认: 在单词边界换行
    open var lineBreakMode: NSLineBreakMode = .byWordWrapping
    
    
    @available(iOS 6.0, *)
    // 富文本内容. 默认: nil
    @NSCopying open var attributedText: NSAttributedString? = nil

    // 按下后状态显示的颜色. 默认: nil
    open var highlightedTextColor: UIColor? = nil

    // 是否高亮. 默认: false
    open var isHighlighted: Bool = false

    // 启用用户交互. 默认: false
    open var isUserInteractionEnabled: Bool = false

    // 更改标签的绘制方式. 默认: true
    open var isEnabled: Bool // default is YES. changes how the label is drawn

    
    // 这决定了要绘制的行数以及调用sizeToFit时要做什么.
    // 默认: 1(单行). 设置0: 表示没有限制(多行).
    // 如果文本的高度达到了#行数, 或者视图的高度小于允许的#行数, 则文本将被删除
    // 如果使用换行模式截断.
    open var numberOfLines: Int = 1

    
    
    /**
     * 下面这3个属性允许标签通过缩放字体大小(s)的缩放因子>=最小缩放因子来自动调整大小以适应一定的宽度
     * 和指定文本基线在需要收缩字体时如何移动
     */
    
    
    // 1. 调整字体大小以适应宽度
    // 常用
    open var adjustsFontSizeToFitWidth: Bool = false
    
    // 2. 调整文字基线距lable 垂直中线的位置. 默认: .alignBaselines
    // 只有 adjustsFontSizeToFitWidth = true && numberOfLines = 1 的时候才生效
    // 很少用
    open var baselineAdjustment: UIBaselineAdjustment = .alignBaselines

    @available(iOS 6.0, *)
    // 3. 最小比例因子. 默认: 0
    // 很少用
    open var minimumScaleFactor: CGFloat = 0

    
    // 在开始截断之前, 如果换行模式是截断模式之一, 则压缩字符间的间距, 试图拟合比可用空间更宽的行.
    // 系统根据上下文(如字体、行宽等)确定所执行的最压缩紧量.
    @available(iOS 9.0, *)
    // 默认: false
    // 很少用
    open var allowsDefaultTighteningForTruncation: Bool = false

    
    // 指定换行策略, 用于在标签中布局文本. 默认: .standard
    // 如果标签包含带有段落样式的属性文本, 该段落样式指定了一组换行策略,
    // 则将使用段落样式中的换行策略集, 而不是此属性定义的换行策略集.
    // 很少用
    open var lineBreakStrategy: NSParagraphStyle.LineBreakStrategy = .standard

    
    // 在指定的矩形中绘制标签的文本行数或其阴影
    // 很少用
    open func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect

    // 在指定的矩形中绘制标签的文本或其阴影
    // 很少用
    open func drawText(in rect: CGRect)

    
    // 文本最大宽度
    @available(iOS 6.0, *)
    open var preferredMaxLayoutWidth: CGFloat

    
    // Indicates whether expansion text will be shown when the view is too small to show all the contents. Defaults to NO.
    // 未知
    open var showsExpansionTextWhenTruncated: Bool = false
}
